<?php
/**
 * Класс реализует общие методы для работы с сущностями
 */
abstract class Default_Model_DbTable_DbTableEntityAbstract
    extends Zend_Db_Table_Abstract
    implements Default_Model_DbTable_CrudInterface
{
	protected $_name;
	protected $_entityId;
	
    public function addEntity(array $data)
    {
    	$this->insert($data);
    }
    
    /**
     * Вставляет в БД новую версию записи
     * @param int $id
     * @param array $data
     * @return int Идентификатор вставленной строки
     */
	public function updateEntity($id, array $newData)
	{
		$result = $this->insert($data);
		return $result;	
	}
	
	/**
     * Поменачет поля всех версий как удаленные
     * @param int $id идентификатор сущности
     * @return int количество затронутых строк
     */
	public function deleteEntity($id, $value)
	{
		$data[$this->_deleted] = $value;
		$where[$this->_entityId.' = ?'] = $id; 
        $result = $this->update($data, $where);
        return $result;
	}
	
	/**
     * Находит в БД сущность по идентификатору
     * @param int $id идентификатор сущности
     * @return Zend_Db_Table_Row
     */
	public function getEntityById($id, $version)
	{
		$select = $this->select()
		               ->from($this, array('*'))
                       ->where($this->_entityId.' = ?', $id)
                       ->where($this->_deleted.' = ?', 0)
                       ->order(array($this->_version.' DESC'))
                       ->limit('1,0');

        if ($version > 0) {
        	$select->where($this->_version.' = ?', $version);
        }
        
		$result = $this->fetchRow($select);
		return $result;
	}
}